home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 5 / Amiga Plus Sonderheft 1996 #5.iso / programme / imagedesk304 / autocat / autocat2.idesk < prev    next >
Text File  |  1996-05-03  |  11KB  |  427 lines

  1. /* ---------------- Steuerdatei für ImageDesk ------------------- */
  2. /*                                                                */
  3. /* A U T O C A T                                                  */
  4. /*                                                                */
  5. /* AREXX-Script zur vollautomatisierten Steuerung von Katalogen   */
  6. /* 2. Teil:                                                       */
  7. /* Steuerscript bei Klick auf Bild                                */
  8. /*                                                                */
  9. /* von Ulrich Röcher, roecher@fts.uni-siegen.de                   */
  10. /*                                                                */
  11. /*----------------------------------------------------------------*/
  12.  
  13. OPTIONS RESULTS
  14.  
  15. if( ADDRESS() ~= "IDESK_REXXPORT" ) then
  16.     ADDRESS IDESK_REXXPORT
  17.  
  18. PARSE ARG iname itype ipos
  19.  
  20. /* -------------------------------------------------------------- */
  21.  
  22.  
  23. CTYP=getclip('CTYP')         /* stelle den Befehlsgrafik-Typ fest */
  24. CDIR=getclip('CDIR')         /* stelle das Befehlsdirectory fest  */
  25. Command=getclip('Command')   /* stelle den richtigen Katalog fest */
  26.  
  27. if itype=CTYP then do
  28.    /* Befehle ausführen */
  29.    
  30.    if POS(".",iname)=0 then iname=iname||'.fehlerhaftes_AREXX'
  31.    DO WHILE POS('/',iname)>0
  32.      iname=substr(iname,POS('/',iname)+1,length(iname))
  33.    end
  34.    if POS(":",iname)>0 then iname=substr(iname,Pos(':',iname)+1,length(iname))
  35.    if POS(".",iname)>0 then iname=substr(iname,1,Pos(".",iname)-1) 
  36.  
  37.  
  38.    select
  39.        when iname="Weiter" then do
  40.          /* gehe zur nächsten Thumbnail-Seite */
  41.          ihvz=getclip('ihvz')
  42.          ADIR=getclip('ADIR')
  43.          MAXENTRY=getclip('MAXENTRY')
  44.          Aktu=getclip('Aktu')
  45.          AnzTN=getclip('AnzTN')
  46.          CLEANDESK
  47.          cat=CDIR||Command
  48.          if CDIR=ADIR then do
  49.            OPENCAT cat 1 1
  50.            end
  51.          else do
  52.            OPENCAT cat 1 2
  53.          end
  54.        
  55.          if pos("-",AnzTN)=0 then do
  56.            AWert=AnzTN
  57.            AnzTN=""
  58.            end
  59.          else do
  60.            x=length(AnzTN)
  61.            do until substr(AnzTN,x,1)="-"
  62.              x=x-1
  63.            end
  64.            tempx=substr(AnzTN,1,x-1)
  65.            AWert=substr(AnzTN,x+1)
  66.            AnzTN=tempx
  67.          end
  68.  
  69.          istTN=Val(AWert)
  70.          
  71.          Lfd_Nr=2
  72.          AnzKats= words(ihvz)
  73.          temp=2
  74.          DO until (Aktu>AnzKats) | (Lfd_Nr=(MAXENTRY-1))
  75.            name=ADIR||Word(ihvz,Aktu)
  76.            OPENCAT name istTN+1 (MAXENTRY-1-Lfd_Nr)
  77.            GETSYSINFO THUMBSUSED
  78.            Lfd_Nr = RESULT
  79.            kat=Lfd_Nr-temp+istTN
  80.            if AnzTN="" then do
  81.              AnzTN=CHR(kat)
  82.              end
  83.            else do
  84.              AnzTN=AnzTN||"-"||CHR(kat)
  85.            end
  86.            temp=Lfd_Nr
  87.            istTN=0
  88.            Aktu=Aktu+1
  89.          end
  90.          if Lfd_Nr=MAXENTRY-1 then OPENCAT CDIR||Command 3 1
  91.          dummy=setclip('Aktu',Aktu-1)
  92.          dummy=setclip('AnzTN',AnzTN)
  93.  
  94.          end
  95.  
  96.        when iname="Zurück" then do
  97.          /* gehe zurück zur letzten Thumbnail-Seite */
  98.          ihvz=getclip('ihvz')
  99.          ADIR=getclip('ADIR')
  100.          MAXENTRY=getclip('MAXENTRY')
  101.          Aktu=getclip('Aktu')
  102.          AnzTN=getclip('AnzTN')
  103.  
  104.          x=length(AnzTN)
  105.          Do while (substr(AnzTN,x,1)~="-") & (x~=0)
  106.            x=x-1
  107.          end
  108.          tempx=substr(AnzTN,1,x-1)
  109.          AWert=substr(AnzTN,x+1,length(AnzTN)-x)
  110.          AnzTN=tempx
  111.          z=Val(AWert)
  112.          Aktu=Aktu-1
  113.  
  114.          GETSYSINFO THUMBSUSED
  115.          IstTN = RESULT
  116.          if IstTN=MAXENTRY then do
  117.            IstTN=IstTN-3
  118.            end
  119.          else do
  120.            IstTN=IstTN-2
  121.          end
  122.          halt=0
  123.          DO until halt=1
  124.            x=length(AnzTN)
  125.            Ende=0
  126.            Do until (x<1) | (Ende=1)
  127.              x=x-1
  128.              if x>0 then do
  129.                if (substr(AnzTN,x,1)="-") then Ende=1
  130.              end
  131.            end
  132.            if x=0 then do
  133.              AWert=AnzTN
  134.              AnzTN=""
  135.            end
  136.            else do
  137.              tempx=substr(AnzTN,1,x-1)
  138.              AWert=substr(AnzTN,x+1,length(AnzTN)-x)
  139.              AnzTN=tempx
  140.            end
  141.            Aktu=Aktu-1
  142.            aw=Val(AWert)
  143.            z=z+aw
  144.            if z>(IstTN+MAXENTRY-3) then halt=1
  145.          end
  146.          z=z-(IstTN+MAXENTRY-3)
  147.          Aktu=Aktu+1
  148.          if (AnzTN="") & (z>1) then do
  149.            Anfang=0
  150.            end
  151.          else do
  152.            Anfang=1
  153.          end
  154.  
  155.          CLEANDESK
  156.          cat=CDIR||Command
  157.          if (Aktu=1) & (Anfang=1) then do
  158.            /* am Anfang, lädt nur hoch */
  159.            if CDIR=ADIR then do
  160.              nop
  161.              end
  162.            else do
  163.              OPENCAT cat 2 1
  164.              end
  165.            afg=0
  166.            z=1
  167.            Lfd_Nr=1
  168.            end
  169.          else do
  170.            if CDIR=ADIR then do
  171.              OPENCAT cat 2 1
  172.              end
  173.            else do
  174.              OPENCAT cat 1 2
  175.            end
  176.            afg=1
  177.            Lfd_Nr=2
  178.          end
  179.  
  180.          istTN=z
  181.          AnzKats= words(ihvz)
  182.          temp=2
  183.          DO until (Aktu>AnzKats) | (Lfd_Nr=(MAXENTRY-1))
  184.            name=ADIR||Word(ihvz,Aktu)
  185.            OPENCAT name (istTN+afg) (MAXENTRY-1-Lfd_Nr)
  186.            GETSYSINFO THUMBSUSED
  187.            Lfd_Nr = RESULT
  188.            if afg=0 then afg=1
  189.            kat=Lfd_Nr-temp+istTN
  190.            if AnzTN="" then do
  191.              AnzTN=CHR(kat)
  192.              end
  193.            else do
  194.              AnzTN=AnzTN||"-"||CHR(kat)
  195.            end
  196.            temp=Lfd_Nr
  197.            istTN=0
  198.            Aktu=Aktu+1
  199.          end
  200.          if Lfd_Nr=MAXENTRY-1 then OPENCAT CDIR||Command 3 1
  201.          dummy=setclip('Aktu',Aktu-1)
  202.          dummy=setclip('AnzTN',AnzTN)
  203.          end
  204.  
  205.        when iname="Hoch" then do
  206.          ADIR=getclip('ADIR')
  207.          MAXENTRY=getclip('MAXENTRY')
  208.          do x=(length(ADIR)-1) to 1 by -1
  209.            if substr(ADIR,x,1)='/' then do
  210.              ADIR=substr(ADIR,1,x)
  211.              leave
  212.            end
  213.            if substr(ADIR,x,1)=':' then do
  214.              ADIR=substr(ADIR,1,x)
  215.              leave
  216.            end
  217.          end
  218.          dummy=setclip('ADIR',ADIR)
  219.          dummy=adress command 'cd 'ADIR
  220.  
  221.          CLEANDESK
  222.  
  223.          if ADIR=CDIR then do
  224.            /* Kommando-Verzeichnis */
  225.              x=1
  226.              y=0
  227.              ihvz=""
  228.              do until x=0
  229.                if y>0 then do
  230.                  wx=CHR(y)
  231.                  if pos("0",wx)=1 then wx=substr(wx,2,length(wx)-1)
  232.                  erg="."||wx
  233.                  end
  234.                else do
  235.                  erg=""
  236.                end
  237.                name="Head.cat"||erg
  238.                name1=CDIR||name
  239.                if exists(name1) then do
  240.                  if ihvz~="" then ihvz=ihvz||" "
  241.                  ihvz=ihvz||name
  242.                  x=1
  243.                  end
  244.                else do
  245.                  x=0
  246.                  end
  247.                y=y+1
  248.              end
  249.  
  250.              dummy=setclip('ihvz',ihvz)
  251.            end
  252.          else do
  253.            /* nur ein Verzeichnis hoch */
  254.            dummy=setclip("ADIR",ADIR)
  255.            dummy=adress command 'cd 'ADIR
  256.            fl=SHOWDIR(ADIR,'File')
  257.  
  258.            IF fl='' then DO
  259.              ERRORMSG '"Fehlerhafter Directoryeintrag"'
  260.              exit
  261.            end
  262.  
  263.            /* Hier Sortierroutine */
  264.            IF fl~='' THEN DO
  265.              fl=translate(fl,' ','"')
  266.              fl=UPPER(fl)
  267.              fl2=''
  268.              DO i=1 TO WORDS(fl)
  269.                Buff=WORD(fl,1)
  270.                Delli=1
  271.                DO j=1 TO WORDS(fl)
  272.                  IF WORD(fl,j)<Buff THEN DO
  273.                    Buff=WORD(fl,j)
  274.                    Delli=j
  275.                  END
  276.                END
  277.                fl=DELWORD(fl,Delli,1)
  278.                fl2=fl2||Buff||' '
  279.              END
  280.              fl=LEFT(fl2,LENGTH(fl2)-1)
  281.            END
  282.            dummy=setclip('ihvz',fl)
  283.            ihvz=fl
  284.            namen=WORD(fl,1)
  285.            cat=CDIR||Command
  286.            OPENCAT cat 2 1
  287.            end
  288.  
  289.          Aktu=1  /* Aktu: Nummer des aktuell zu ladenden Katalogs */
  290.          Lfd_Nr=1
  291.          temp=1
  292.          AnzTN='' /* AnzTN: Zeichenkette enthält Anzahl der TNs der Katas. */
  293.          AnzKats= words(ihvz)
  294.          DO until (Aktu>AnzKats+1) | (Lfd_Nr=(MAXENTRY-1))
  295.            name=ADIR||Word(ihvz,Aktu)
  296.            OPENCAT name 1 (MAXENTRY-1-Lfd_Nr)
  297.            GETSYSINFO THUMBSUSED
  298.            Lfd_Nr = RESULT
  299.            kat=Lfd_Nr-temp
  300.            tempx=CHR(kat)
  301.            if AnzTN="" then do
  302.              AnzTN=CHR(kat)
  303.              end
  304.            else do
  305.              AnzTN=AnzTN||"-"||CHR(kat)
  306.            end
  307.            temp=Lfd_Nr
  308.            Aktu=Aktu+1
  309.          end
  310.  
  311.          if Lfd_Nr=MAXENTRY-1 then OPENCAT CDIR||Command 3 1
  312.          dummy=setclip('Aktu',Aktu-1)
  313.          AnzTN=strip(AnzTN)
  314.          dummy=setclip('AnzTN',AnzTN)
  315.        end
  316.        otherwise do
  317.  
  318.          /* alles andere ist ein CD-Befehl */
  319.          ADIR=getclip('ADIR')
  320.          MAXENTRY=getclip('MAXENTRY')
  321.          ADIR=ADIR||iname||'/'
  322.          dummy=setclip("ADIR",ADIR)
  323.          dummy=setclip('AnzTN',"")
  324.          dummy=setclip('Aktu',0)
  325.          dummy=adress command 'cd 'ADIR
  326.          fl=SHOWDIR(ADIR,'File')
  327.  
  328.          IF fl='' then DO
  329.            ERRORMSG '"Fehlerhafter Directoryeintrag"'
  330.            exit
  331.          end
  332.  
  333.          /* Hier Sortierroutine */
  334.          IF fl~='' THEN DO
  335.            fl=translate(fl,' ','"')
  336.            fl=UPPER(fl)
  337.            fl2=''
  338.            DO i=1 TO WORDS(fl)
  339.              Buff=WORD(fl,1)
  340.              Delli=1
  341.              DO j=1 TO WORDS(fl)
  342.                IF WORD(fl,j)<Buff THEN DO
  343.                  Buff=WORD(fl,j)
  344.                  Delli=j
  345.                END
  346.              END
  347.              fl=DELWORD(fl,Delli,1)
  348.              fl2=fl2||Buff||' '
  349.            END
  350.            fl=LEFT(fl2,LENGTH(fl2)-1)
  351.          END
  352.          dummy=setclip('ihvz',fl)
  353.          ihvz=fl
  354.          namen=WORD(fl,1)
  355.  
  356.          CLEANDESK
  357.          cat=CDIR||Command
  358.          OPENCAT cat 2 1
  359.  
  360.          Aktu=1  /* Aktu: Nummer des aktuell zu ladenden Katalogs */
  361.          Lfd_Nr=1
  362.          temp=1
  363.          AnzTN='' /* AnzTN: Zeichenkette enthält Anzahl der TNs der Katas. */
  364.          AnzKats= words(ihvz)
  365.          DO until (Aktu>AnzKats) | (Lfd_Nr=(MAXENTRY-1))
  366.            name=ADIR||Word(ihvz,Aktu)
  367.            OPENCAT name 1 (MAXENTRY-1-Lfd_Nr)
  368.            GETSYSINFO THUMBSUSED
  369.            Lfd_Nr = RESULT
  370.            kat=Lfd_Nr-temp
  371.            tempx=CHR(kat)
  372.            if AnzTN="" then do
  373.              AnzTN=CHR(kat)
  374.              end
  375.            else do
  376.              AnzTN=AnzTN||"-"||CHR(kat)
  377.            end
  378.            temp=Lfd_Nr
  379.            Aktu=Aktu+1
  380.          end
  381.          if Lfd_Nr=MAXENTRY-1 then OPENCAT CDIR||Command 3 1
  382.          dummy=setclip('Aktu',Aktu-1)
  383.          AnzTN=strip(AnzTN)
  384.          dummy=setclip('AnzTN',AnzTN)
  385.        end
  386.     end
  387.   end
  388. else do
  389.   /* Bild zeigen */
  390.      VIEWIMAGE iname 
  391. end
  392. exit
  393.  
  394.  
  395. CHR: PROCEDURE
  396. /* wandelt Zahl in Zeichenkette */
  397. parse arg zahl
  398.  
  399. Wert=''
  400. DO until zahl<10
  401.   zw=Zahl//10
  402.   Zahl=Zahl%10
  403.   ch=d2c(zw+48)
  404.   Wert=ch||Wert
  405. end
  406. ch=d2c(Zahl+48)
  407. wert=ch||Wert
  408. Return Wert
  409.  
  410. VAL: PROCEDURE
  411. /* wandelt Wert aus Zeichenkette in Zahl */
  412. parse arg zk
  413.  
  414. Stelle=1
  415. Wertx=0
  416. zk=strip(zk)
  417. x=length(zk)
  418. do until x=0
  419.   Ziffer=substr(zk,x,1)
  420.   Wertx=Wertx + (pos(Ziffer,"123456789") * Stelle)
  421.   Stelle=Stelle * 10
  422.   x=x-1
  423. end
  424. Return Wertx
  425.  
  426.  
  427.